/**
 * @author 木人心
 * @version 1.1.0
 */
import { CreateAxiosDefaults } from 'axios'
import { CodeItemConfig } from '@utils/request/type'
import qs from 'qs'

// region TODO axios全局配置
export const axiosConfig: CreateAxiosDefaults = {
  // 超时时间
  timeout: 120000,
  // 参数序列化
  paramsSerializer: (p) => qs.stringify(p, { indices: false })
}
// endregion

// region TODO 授权配置
export const axiosAuthConfig = {
  // 许可键名
  authorizationKey: 'satoken',
  // 未授权状态码
  unauthorizedCode: 401,
  // 异地登录状态码
  remoteLoginCode: 602
}
// endregion

// region TODO 请求频率拦截
export const cancelTokenConfig = {
  // 是否使用请求拦截器
  isUse: true,
  // 记录频率：多长时间内重复请求被记录
  recordFrequency: 1000,
  // 重复请求到达该次数时提醒
  warningThreshold: 10,
  // 重复请求到达该次数时拦截
  errorThreshold: 20
}

// endregion

// region TODO 状态码配置
export const statusCodeConfig = {
  status: {
    400: '请求参数有误',
    404: '您访问的资源不存在',
    405: '请求方法不能被用于请求相应的资源',
    415: '请求不支持该媒体类型',
    403: '您无权访问此资源',
    500: '请求服务器错误',
    default: '请求服务器出现异常'
  },
  code: {
    200: { message: false, break: false },
    201: { message: true, break: false },
    default: { message: true, break: true }
  } as Record<string, CodeItemConfig>
}
statusCodeConfig.code[axiosAuthConfig.unauthorizedCode] = { message: false, break: true }
statusCodeConfig.code[axiosAuthConfig.remoteLoginCode] = { message: false, break: true }
// endregion

// region TODO 自动提示（通知）
export const messageConfig = {
  // 相同信息的通知频率
  frequency: 3000
}
// endregion
